<?php
include_once dirname(__FILE__) . '/IPNListener.class.php';
//require_once 'IPNListener.class.php';

class EfListener extends IPNListener
{
	protected $conn;  

	protected function dbConnect()  
	{  
		$this->conn = @mysql_connect(HOST, USERNAME, PASSWORD) OR die();  

		@mysql_select_db(DB,$this->conn) OR die();  
	}  
	protected function isVerifiedAmmount()
	{				
		$id_contratto = $_POST['item_number']; 
		
        $this->dbConnect();  
		$sql = "SELECT costo FROM contratti WHERE id_contratto = $id_contratto";
		//die($sql);
		$result = mysql_query ($sql, $this->conn);
		if ($rowContratto = mysql_fetch_array($result))
			$costo = $rowContratto['costo'];
		else		
			$costo = 0;
		
		//$this->debugMail(__LINE__, "costo post: ".$_POST['mc_gross']);
		//$this->debugMail(__LINE__, "costo cdb: ".$costo);
		
		if($_POST['mc_gross'] == $costo)
		{
			return TRUE;
		}
        $this->sendReport("isVerifiedAmmount KO");	
		//$this->debugMail(__LINE__, "isVerifiedAmmount KO");

		return FALSE;
	}

	protected function isNotProcessed()
	{
        $this->dbConnect();  
		$sql = "SELECT * FROM contratti WHERE id_transazione='$_POST[txn_id]'";
		$res = mysql_query($sql, $this->conn);
		if(mysql_num_rows($res))
		{
			return FALSE;
		}
		return TRUE;
	}

	protected function getRandPassword()
	{
		$result = "";
		for($i = 0;$i < 10; $i++)
		{
			$chr = rand(40,126);
			$result .= chr($chr);
		}
		return $result;
	}

	protected function sendMailAttivazioneContratto($contratto)
	{
		if(SIMULATION)
		{
			$to = ADMIN_MAIL;
			$add = "- SIMULAZIONE -";
		}
		else
		{
			$to = $_POST['payer_email'];
			$add = "";
		}

		$subject = "$add Attivazione annuncio su EscortFashion";
		$from = NO_REPLY;
		$message = "Ciao $_POST[first_name] e benvenuto su EscortFashion\r\n";
		$message .= "Abbiamo ricevuto il pagamento dell'Abbonamento e il tuo contratto: ";
		$message .= "$contratto è ora on-line \r\n\r\n";
		$message .= "Your exclusive Toy - EscortFashion.com";

		mail($to,$subject,$message,"From: noreply<$from>");
	}
	protected function sendMailPaymentOk($contratto)
	{
		if(SIMULATION)
		{
			$to = ADMIN_MAIL;
			$add = "- SIMULAZIONE -";
		}
		else
		{
			$to = $_POST['payer_email'];
			$add = "";
		}

		$subject = "$add Ricezione pagamento";
		$from = PAYMENT_MAIL;
		$message = "$_POST[first_name] ha completato il pagamento del contratto.\r\n";
		$message .= "Abbiamo ricevuto il pagamento dell'Abbonamento e il suo contratto: ";
		$message .= "$contratto è ora on-line";

		mail($to,$subject,$message,"From: noreply<$from>");
	}

	public function setPaymentOK()
	{
		$this->debugMail(__LINE__, "setPaymentOK");
		if($this->isReadyTransaction())
		{				
			$id_user = $_POST['custom']; 
			$id_contratto = $_POST['item_number']; 
		
			$this->debugMail(__LINE__, "Inizio setPaymentOK");
        	$this->dbConnect();  
			mysql_query("BEGIN", $this->conn);
			
			$sql = "UPDATE contratti
			SET id_transazione = '$_POST[txn_id]', dt_pagamento = now() 
			WHERE id_contratto = $id_contratto";			
			//VALUES ('$_POST[first_name]','$_POST[last_name]','$_POST[payer_email]','$_POST[payer_email]','$md5password','$_POST[txn_id]')";

			$result = mysql_query($sql, $this->conn);
			if(!$result)
			{
				$message  = 'Invalid query: ' . mysql_error() . "\n";
				$message .= 'Whole query: ' . $sql;
				mysql_query("ROLLBACK", $this->conn);
				mysql_close($conn);
        		$this->sendReport($message);					
				return;
			}		
			
			$sql = "UPDATE utenti
			SET f_attivo_admin = 'S', f_attivo = 'S'  
			WHERE user_id = $id_user";		
			$result = mysql_query($sql, $this->conn);
				
			if(!$result)
			{
				$message  = 'Invalid query: ' . mysql_error() . "\n";
				$message .= 'Whole query: ' . $sql;
				mysql_query("ROLLBACK", $this->conn);
				mysql_close($conn);
        		$this->sendReport($message);					
				return;
			}		
			
			//*** Recupero la durata in giorni dell'abb se c'è, e attivo le date di validità del contratto abb ***/
			$sql = "SELECT durata_gg FROM abbonamenti inner join tariffe_abb ON abbonamenti.id_tariffa = tariffe_abb.id_tariffa WHERE abbonamenti.id_contratto=$id_contratto";
			
			$result = mysql_query($sql, $this->conn);
			if(!$result)
			{
				$message  = 'Invalid query: ' . mysql_error() . "\n";
				$message .= 'Whole query: ' . $sql;
				mysql_query("ROLLBACK", $this->conn);
				mysql_close($conn);
				$this->debugMail(__LINE__, "SELECT durata_gg");
        		$this->sendReport($message);					
				return;
			}		
			if (mysql_num_rows($result)>0)
			{
				$row = mysql_fetch_array($result);
	 
				$durata_gg = $row['durata_gg'];	
				mysql_free_result($result);
						
				//Aggiorno le date di attivazione con data odierna e data finale = data odierna + periodo
				$sql = "UPDATE abbonamenti SET dt_inizio = now(), dt_fine = DATE_ADD(CURDATE(), INTERVAL $durata_gg DAY) WHERE id_contratto = $id_contratto";
				$result = mysql_query($sql, $this->conn);
				if(!$result)
				{
					$message  = 'Invalid query: ' . mysql_error() . "\n";
					$message .= 'Whole query: ' . $sql;
					mysql_query("ROLLBACK", $this->conn);
					mysql_close($conn);
					$this->sendReport($message);					
					return;
				}		
			}	
			//***********************//
			
			//*** Recupero la durata in giorni del banner se c'è, e attivo le date di validità del contratto banner ***/
			$sql = "SELECT durata_gg FROM banner_abb inner join tariffe_banner ON banner_abb.id_tariffa = tariffe_banner.id_tariffa WHERE banner_abb.id_contratto=$id_contratto";			
			$result = mysql_query($sql, $this->conn);
			
			if(!$result)
			{
				$message  = 'Invalid query: ' . mysql_error() . "\n";
				$message .= 'Whole query: ' . $sql;
				mysql_query("ROLLBACK", $this->conn);
				mysql_close($conn);
        		$this->sendReport($message);					
				return;
			}		
			if (mysql_num_rows($result)>0)
			{
				$row = mysql_fetch_array($result);
	 
				$durata_gg = $row['durata_gg'];	
				mysql_free_result($result);
						
				//Aggiorno le date di attivazione con data odierna e data finale = data odierna + periodo
				$sql = "UPDATE banner_abb SET dt_inizio = now(), dt_fine = DATE_ADD(CURDATE(), INTERVAL $durata_gg DAY) WHERE id_contratto = $id_contratto";
				$result = mysql_query($sql, $this->conn);
				
				if(!$result)
				{
					$message  = 'Invalid query: ' . mysql_error() . "\n";
					$message .= 'Whole query: ' . $sql;
					mysql_query("ROLLBACK", $this->conn);
					mysql_close($conn);
					$this->sendReport($message);					
					return;
				}		
			}
			//***********************//			
			mysql_query("COMMIT", $this->conn);
			mysql_close($this->conn);
				
			$this->sendMailAttivazioneContratto($id_contratto);
			$this->sendMailPaymentOk($id_contratto);
		}
	}
	public function debugMail($line, $msg)  
	{  
		mail("gabbracciavento@inwind.it", "DEBUG", "$msg", "Riga: $line");  
	} 
}
$ipn = new EfListener();
$ipn->debugMail(__LINE__, "Inizio Listener");

$ipn->setPaymentOK();
//$ipn->debugMail(__LINE__, "Fine Listener");
?>
 